Historically, a single computing device ran a single operating system. Each computer user, for instance, was assigned his or her own client computing device, and that computing device ran an operating system in which the user could run application programs as desired. Similarly, a server computing device ran a single operating system that ran application programs.
However, this type of computer architecture has disadvantages. First, it is costly, because each computing device needs a complete assortment of processors, memory, and input/output (I/O) devices to properly function whether it is being utilized or not. Second, the use of this type of architecture can be inefficient. At any given time, a given computing device may not be performing work, and rather is sitting idle, waiting for a task to be performed during times when workloads increase.
Therefore, a technology has been developed in which more than one operating system is capable of running on a single computing device, sharing at least the memory and the processors of the computing device. Such technology is referred to as virtualization. With virtualization, a given computing device has a number of virtual machines (VM's), or VM environments, where a guest operating system is run in each VM or VM environment. Therefore, guest operating systems for multiple computer users can be run simultaneously on a single computing device, such as a single server computing device. When workload demands are high, more VM's can be instantiated and run. When workloads are low, VM's can be suspended.
Periodically, a virtual machine may have to be migrated from one server computing device, or server, to another server computing device, or server. For instance, the server that is currently hosting the virtual machine may need to be serviced, such that the virtual machine has to be migrated to another server while the service or maintenance is being performed. As another example, a server may be currently hosting a number of other virtual machines, such that the performance of the virtual machines is suffering. Therefore, migrating one or more of these virtual machines to another server may be accomplished to increase the performance of all the virtual machines.
Within the prior art, migration of a virtual machine from a first server to a second server is typically accomplished by copying or moving all the files relating to the virtual machine from the first server to the second server. These files may include configuration files, virtual disk files, and other types of files associated with the virtual machine. Copying or moving the files to the second server may thus be a prerequisite for the virtual machine to be migrated to the second server.
However, copying or moving all the files relating to the virtual machine can be a slow process. Even with gigabit Ethernet network connections, for instance, copying or moving gigabytes of data over such a network connection can take a long time. As a result, virtual machine migration can be a slow process. For this and other reasons, therefore, there is a need for the present invention.